<?php
class Paycallback extends CI_Controller
{
    public function __construct()
    {   
        parent::__construct();
        $this->load->library('alipay/alipaypc',null,'alipaypc');
        $this->load->model('pay_failure_log_model', 'pay_failure_log');
        $this->load->model('sales_order_model', 'sales_order');
    }
    
    /*支付宝回调异步*/
    public function alipayNotify(){
   
       $response = $this->alipaypc->responseAlipayNotify();
       $order_sn = $response;
       $postdata = $this->input->post();
       $result = $this->sales_order->byOrderOrderSn($order_sn);
       $orderInfo = $result->row();
       if($response){
           if ($orderInfo->order_state != '2') {
               $this->sales_order->payUpdateOrderStatus($order_sn);
           }
       }else{
           $result = $this->pay_failure_log->findByOrderSn($order_sn);
           if (!$result) { //保存错误日志。
               $last_id = $this->pay_failure_log->insertPayFailureLog($order_sn, $postdata, $response);
           }
       }
    }
    /**
     *
     * @param unknown $telephone
     * @param unknown $content
     * @param number $sms_type 1:56短信；2：亿美短信
     */
    public function sendToSms($telephone, $content, $sms_type=1)
    {
        $this->load->library('sms');
        $is_send = $this->sms->sendSMS($telephone, $content);
    }
    
    /* 微信jsapi支付回调*/
    public function wxNotify()
    {
        include_once(getcwd()."/application/libraries/wxpay/WxPayPubHelper/WxPayPubHelper.php");
        $notify = new Notify_pub();//使用通用通知接口
        $xml    = file_get_contents('php://input', 'r');   //存储微信的回调
        $notify->saveData($xml);
        
        //验证签名，并回应微信。
        //对后台通知交互时，如果微信收到商户的应答不是成功或超时，微信认为通知失败，
        //微信会通过一定的策略（如30分钟共8次）定期重新发起通知，
        //尽可能提高通知的成功率，但微信不保证通知最终能成功。
        if( $notify->checkSign() == FALSE ){
            $notify->setReturnParameter("return_code","FAIL");  //返回状态码
            $notify->setReturnParameter("return_msg","签名失败");  //返回信息
        }else{
            $notify->setReturnParameter("return_code","SUCCESS");//设置返回码
        }
        $returnXml = $notify->returnXml();
        echo $returnXml;      //echo为微信返回值   不能更改   不能删除  
         
        if($notify->checkSign() == TRUE)
        {
            if ($notify->data["return_code"] == "FAIL" || $notify->data["result_code"] == "FAIL") 
            {
                $return_param = "【通信出错】【业务出错】:\n".$xml."\n";
                $result = $this->pay_failure_log->findByOrderSn($notify->data["out_trade_no"]);
                if (!$result) { //保存错误日志。
                    $last_id = $this->pay_failure_log->insertPayFailureLog($notify->data["out_trade_no"], $return_param, "微信支付报错");
                }
            }else{
                $result = $this->sales_order->findByOrderId($notify->data["out_trade_no"]);
                $orderInfo = $result->row();
                if ($orderInfo->order_state != '2' ) {
                        $this->sales_order->payUpdateOrderStatus($orderInfo->order_sn);
                }
            }
        }
     }

    /*android 微信 支付回调*/
    public function androidAppNotify()
    {
        include_once(getcwd()."/application/libraries/appwxpay/WxPayPubHelper/WxPayPubHelper.php");
        include_once(getcwd()."/application/libraries/appwxpay/WxPayPubHelper/log_.php");
        //使用通用通知接口
        $notify = new Notify_pub();
        
        //存储微信的回调
        $xml = file_get_contents('php://input', 'r');
        $notify->saveData($xml);
        
        //验证签名，并回应微信。
        //对后台通知交互时，如果微信收到商户的应答不是成功或超时，微信认为通知失败，
        //微信会通过一定的策略（如30分钟共8次）定期重新发起通知，
        //尽可能提高通知的成功率，但微信不保证通知最终能成功。
        if($notify->checkSign() == FALSE){
            $notify->setReturnParameter("return_code","FAIL");//返回状态码
            $notify->setReturnParameter("return_msg","签名失败");//返回信息
        }else{
            $notify->setReturnParameter("return_code","SUCCESS");//设置返回码
        }
        $returnXml = $notify->returnXml();
        echo $returnXml;
        
        //==商户根据实际情况设置相应的处理流程，此处仅作举例=======
        
        //以log文件形式记录回调信息
        $log_ = new Log_();
        $log_name = $_SERVER['DOCUMENT_ROOT']."/.notify_url.log";//log文件路径
        $log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
        
        if($notify->checkSign() == TRUE)
        {
            if ($notify->data["return_code"] == "FAIL") {
                //此处应该更新一下订单状态，商户自行增删操作
                $log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
            }
            elseif($notify->data["result_code"] == "FAIL"){
                //此处应该更新一下订单状态，商户自行增删操作
                $log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
            }
            else{
                //此处应该更新一下订单状态，商户自行增删操作
                $log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
            }
        }
    }
}

